import { session, desktopCapturer, BrowserWindow } from 'electron'

const useRecordHook = () => {
  session.defaultSession.setDisplayMediaRequestHandler(
    async (_request, callback) => {
      // 获取所有可用的屏幕和窗口源
      const sources = await desktopCapturer.getSources({
        types: ['window'],
        fetchWindowIcons: true
      })

      // 获取当前应用的所有窗口
      const allWindows = BrowserWindow.getAllWindows()

      // 查找应用主窗口
      let appSource: Electron.DesktopCapturerSource | null = null

      // 遍历所有捕获源
      for (const source of sources) {
        // 检查窗口标题是否匹配我们的应用窗口
        // 应用ID是'com.threegold'
        for (const win of allWindows) {
          // 如果窗口标题包含在捕获源名称中，那么这就是我们的应用窗口
          if (source.name.includes(win.getTitle())) {
            console.log('find app window:', source.name)
            appSource = source
            break
          }
        }
        if (appSource) break
      }

      // 如果找到了应用窗口，使用它，否则默认使用第一个源
      if (appSource) {
        console.log('use app window to record:', appSource.name)
        callback({ video: appSource, audio: 'loopback' })
      } else {
        console.log('no find app window, use first source:', sources[0]?.name)
        callback({ video: sources[0], audio: 'loopback' })
      }
    },
    { useSystemPicker: true }
  )
}

export default useRecordHook
